home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
zugabe
/
gcc281
/
gcc_vmt
/
gcc_vmt.doc
< prev
next >
Wrap
Text File
|
1996-11-20
|
3KB
|
99 lines
____ ____ ____ _ _ _ __ __ ________
//¯¯\\ //¯¯\\ //¯¯\\ // // \\ //\\ //\\ ¯¯¯//¯¯¯
// ¯ // ¯ // ¯ \\ \\ // // \\// \\ \\
// ___ // // ___ // // \\ \\ ¯¯ // //
\\ ¯¯\\ \\ \\ ¯¯¯ \\ \\ // // \\ \\
\\ // \\ _ \\ _ _ \\ // \\ // //
\\__// \\__// \\__// // \\// // \\ \\
¯¯¯¯ ¯¯¯¯ ¯¯¯¯ ¯ ¯¯ ¯ ¯ ¯
v1.04ß für ATARI ST von Armin Diedering
1. Das Symptom
Beim GNU C++ kam es vor, daß Module eine unverhältnismäßige Länge hatten.
Bei mir z.B. ergab die Compilierung der Zeile "#include<library.h>" ein
Modul mit knapp 3.5kByte.
2. Der Grund
Um beim C++ eine dynamische Bindung bei virtuellen Funktionen zu
erreichen, wird eine VMT (Virtual Method Table) verwendet. Die VMT ist
eine Tabelle mit Funktionszeigern. Eine solche Tabelle wird für jede
Classe, die virtuelle Funktionen enthält bzw. geerbt hat, erzeugt.
Solche Tabellen werden nun in jedes Modul statisch abgelegt aber nicht nur
die, die in diesem Modul benötigt werden. Sondern es wird für jede
deklarierte Classe, ob nun die VMT in diesem Modul benötigt wird oder
nicht, abgelegt. Je nach Umfang und Vererbungsgrad können schon mal
mehrere kByte VMT-Leichen in einem Modul schlummern.
3. Die Lösung
Die Lösung heißt GCC-!VMT. Dieses Programm klinkt sich zwischen den
Compiler und den Assembler des GNU C++ und filtert unbenutzte Tabellen
aus.
4. Die Installation
Benötigt wird ein installiertes GNU C und die 2 Files GCC-CC1P.TTP und
GCC-!VMT.TTP.
Zur Installation sind nur 2 Schritte nötig:
1. Die Datei "GCC-CC1P.TTP" im Ordner "BIN" vom GNU C in "GCC-CC1P.BIN"
umbenennen.
2. Die Dateien "GCC-CC1P.TTP" und "GCC-!VMT.TTP" in den Ordner "BIN"
vom GNU C kopieren.
fertig.
Rechtliches
GCC-!VMT ist Public Domain und darf und soll frei kopiert und weiter
gegeben werden.
5. History
GCC-!VMT v1.00ß
das erste
GCC-!VMT v1.01ß
Infotext wird nun nicht mehr immer Angezeigt
GCC-!VMT v1.02ß
Infotext nur bei Compiler-Option -V
GCC-!VMT v1.03ß
Infotext auch bei Compiler-Option -Wall
hierbei jedoch ohne Versions-Text
GCC-!VMT v1.04ß
Bug beseitigt. wenn asm() befehle Leerzeilen enthielten gingen
Daten verloren.
6. Kontakt
Bei Anmerkungen, Kritik oder Lobpreisungen könnt Ihr mir schreiben
im Maus-Net an Armin Diedering @ L2
__ ___ __
/ \\/ \\/ \\
\_//\__//\_//
oder per Post
Armin Diedering
Plötzkauer Ring
06366 Köthen
____________________________________________________
/ \\
/ Jedenfalls viel Spaβ und immer schmalen Code ... //
\___________________________________________________//